﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using IUAP.DAL.Intranet;
using IUAP.DAL;

/// <summary>
/// Descripción breve de Periodo
/// </summary>
namespace IUAP.BLL.Intranet
{
    public class Periodo:BaseIntranet
    {
        public Periodo()
        {

        }

       public Periodo(int _id_periodo,
            string _nomb_peri,
            string _desc_peri,
            DateTime _fech_inic_peri,
            DateTime _fech_term_peri,
            bool _actv_peri)
        {
            this.Id_periodo = _id_periodo;
            this.Nomb_peri = _nomb_peri;
            this.Desc_peri = _desc_peri;
            this.Fech_inic_peri = _fech_inic_peri;
            this.Fech_term_peri = _fech_term_peri;
            this.Actv_peri = _actv_peri;
        }

        int id_periodo = 0;

        public int Id_periodo
        {
            get { return id_periodo; }
            set { id_periodo = value; }
        }
        string nomb_peri = "";

        public string Nomb_peri
        {
            get { return nomb_peri; }
            set { nomb_peri = value; }
        }
        string desc_peri = "";

        public string Desc_peri
        {
            get { return desc_peri; }
            set { desc_peri = value; }
        }
        DateTime fech_inic_peri = DateTime.Now;

        public DateTime Fech_inic_peri
        {
            get { return fech_inic_peri; }
            set { fech_inic_peri = value; }
        }
        DateTime fech_term_peri = DateTime.MaxValue;

        public DateTime Fech_term_peri
        {
            get { return fech_term_peri; }
            set { fech_term_peri = value; }
        }
        bool actv_peri = true;

        public bool Actv_peri
        {
            get { return actv_peri; }
            set { actv_peri = value; }
        }
        public bool update()
        {
            return Periodo.UpdatePeriodo(this.Id_periodo, this.Nomb_peri, this.Desc_peri,this.Actv_peri);
        }
        public static int InsertPeriodo(string nomb_peri, string desc_peri, DateTime fech_inic_peri,DateTime fech_term_peri)
        {
            PeriodoDetalles record = new PeriodoDetalles(0, nomb_peri, desc_peri, fech_inic_peri, fech_term_peri,true);
            int ret = SiteProvider.Intranet.InsertPeriodo(record);
            BizObject.PurgeCacheItems("Intranet_Periodo");
            return ret;
        }
        public static bool UpdatePeriodo(int id_periodo,string nomb_peri, string desc_peri,bool actv_peri)
        {
            PeriodoDetalles record = new PeriodoDetalles(id_periodo, nomb_peri, desc_peri,DateTime.Now,DateTime.MaxValue,actv_peri);
            bool ret = SiteProvider.Intranet.UpdatePeriodo(record);
            BizObject.PurgeCacheItems("intranet_Escuela");
            return ret;
        }
        public static bool UpdateEstadoPeriodo(int id_periodo, bool actv_peri)
        {
            bool ret = SiteProvider.Intranet.UpdateEstadoPeriodo(id_periodo, actv_peri);
            BizObject.PurgeCacheItems("Intranet_Periodo");
            return ret;
        }
        public static List<Periodo> GetPeriodos()
        {
            List<Periodo> periodo = null;
            string key = "Intranet_Periodo";
            if (BaseIntranet.Settings.EnableCaching && BizObject.Cache[key] != null)
            {
                periodo = (List<Periodo>)BizObject.Cache[key];
            }
            else
            {
                List<PeriodoDetalles> recordset = SiteProvider.Intranet.GetPeriodos(true);
                periodo = GetPeriodoListDePeriodosDetallesList(recordset);
                BaseIntranet.CacheData(key, periodo);
            }
            return periodo;
        }
        public static List<Periodo> GetSimPeriodos()
        {
            List<Periodo> periodo = null;
            string key = "Intranet_Periodo";
            if (BaseIntranet.Settings.EnableCaching && BizObject.Cache[key] != null)
            {
                periodo = (List<Periodo>)BizObject.Cache[key];
            }
            else
            {
                List<PeriodoDetalles> recordset = SiteProvider.Intranet.GetSimPeriodos(true);
                periodo = GetPeriodoListDePeriodosDetallesList(recordset);
                BaseIntranet.CacheData(key, periodo);
            }
            return periodo;
        }
        public static List<Periodo> GetSimPeriodos(int id_escuela,string id_docente)
        {
            List<Periodo> periodo = null;
            string key = "Intranet_Periodo";
            if (BaseIntranet.Settings.EnableCaching && BizObject.Cache[key] != null)
            {
                periodo = (List<Periodo>)BizObject.Cache[key];
            }
            else
            {
                List<PeriodoDetalles> recordset = SiteProvider.Intranet.GetSimPeriodos(true,id_escuela,id_docente);
                periodo = GetPeriodoListDePeriodosDetallesList(recordset);
                BaseIntranet.CacheData(key, periodo);
            }
            return periodo;
        }
        private static List<Periodo> GetPeriodoListDePeriodosDetallesList(List<PeriodoDetalles> recordset)
        {
            List<Periodo> periodo = new List<Periodo>();
            foreach (PeriodoDetalles record in recordset)
            {
                periodo.Add(GetPeriodoFromPeriodoDetalles(record));
            }
            return periodo;
        }
        private static Periodo GetPeriodoFromPeriodoDetalles(PeriodoDetalles record)
        {
            if (record == null)
                return null;
            else
            {
                return new Periodo(record.Id_periodo, record.Nomb_peri, record.Desc_peri,
                   record.Fech_inic_peri, record.Fech_term_peri, record.Actv_peri);
            }
        }
    }
}